function* foo(x) {
    let a = yield x + 1;
    let b= yield a + 2;
    return x + 3;
}
const result = foo(0) // foo {<suspended>}
console.log('1',result.next(1))  // {value: 1, done: false} 这个参数带不带都无所谓 因为这之前没有yield
console.log('2',result.next(2))  // {value: 4, done: false} 将第一个yield返回值为2 =>a=2 => 第二个yield后的表达式结果为4
console.log('3',result.next(3))  // {value: 3, done: true}  将第二个yield返回值为3 但此时函数执行到return了 return 0+3 = 3
console.log('4',result.next(4))  //{value: undefined, done: true}
